﻿/*
 * 
 * 隐式类型转换：
 * 
 *              含义：将取值范围较小的数据或变量，赋值给一个取值范围较大的变量
 *              
 *              隐式类型转换规则：
 *                          1、无符号类型不能接纳有符号类型数据。
 *                          2、byte -> short -> 
 *                                              int -> long -> float -> double
 *                                       char->
 *              
 *              运算过程当中的隐式类型转换：
 *                          1、小的数据类型需要先转化为大数据类型，再进行计算
 *                          
 *                          2、byte short char变量进行计算的时候，都会预先转化为int类型参与计算
 * 
 * 
 * 
 * 显示类型转换：
 * 
 *            含义：将取值范围较大的数值或者变量，赋值给一个取值范围较小的变量；
 *            
 *            格式：目标数据类型 变量名 = (目标数据类型)需要转换的数据或变量
 *            
 *            注意：
 *                  1、点数转化为整数，将小数部分直接抛弃
 *                  
 *                  2、将较大的字面量显示类型转换为一个较小的类型，赋值给较小类型变量，会被编译器检测出来
 *                  
 *                  
 *使用convert类当中的方法（工具）
 *                      1、将任意类型数据，转化为任意类型
 *                      
 *                      2、如果类型无法转换成功，则会报错
 *                  
 *                  
 *                  
 */
namespace 类型转换
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("---------------隐式类型转换--------------");
            int a = 10;

            
            long lb = a;
            Console.WriteLine("long类型接纳int后： " + lb);
            
            double jk = a;
            Console.WriteLine("double类型接纳int后： " + jk);

            //sbyte io = 10;
            //uint ui = io; //无符号类型不能接纳有符号类型数据

            byte b1 = 10;

            short s1 = b1;

            int i1 = s1;

            long l1 = i1;

            float f1 = l1;

            double d1 = f1;

            char c1 = 'a';
            int i0 = c1;
            Console.WriteLine(i0);

            //运算过程中的隐式类型转换
            //小的数据类型需要先转化为大数据类型，再进行计算
            double qw = 10.0;
            int jh = 5;

            double op =qw + jh;
            Console.WriteLine(op);


            //byte short char变量进行计算的时候，都会预先转化为int类型参与计算
            byte b2 = 10;
            byte b3 = 11;
            int b4 = (b2 + b3);

            short s2 = 10;
            short s3 = 11;
            int s4 = s2 + s3;

            char c2 = 'a';
            char c3 = 'b';
            int c4 = c2 + c3;

            Console.WriteLine("---------------显示类型转换--------------");

            long bigNum = 10;
            float fbigNum = 10.123f;

            int smallNum = (int)bigNum;
            smallNum = (int)fbigNum;
            Console.WriteLine(smallNum);

            int iBigNum = 257;
            byte byteNum = (byte)iBigNum;

            Console.WriteLine("将257较大的数字，赋值给一个byte数据，得到：" + byteNum);

            iBigNum = 130;
            sbyte sbyteNum = (sbyte)iBigNum;

            Console.WriteLine("将130较大的数字，赋值给一个sbyte数据，得到：" + sbyteNum);



            Console.WriteLine("---------------使用convert类中的方法进行转换--------------");

            int a20 = Convert.ToInt32('a');
            Console.WriteLine(a20);

            a20 = Convert.ToInt32("123");
            Console.WriteLine(a20);

            double d20 = Convert.ToDouble("123.321");
            Console.WriteLine(d20);

            





        }
    }
}